/*
哈希值：是一个十进制的整数，是系统随机给出的地址值，不是物理地址值
 */

public class demo{

    public static void main(String[] args) {
        person p1 = new person();
        int h = p1.hashCode();      //调用对象中的hashCode方法（在Object类）
        System.out.println(h);


        String s1 = new String("abc");
        int h1 = s1.hashCode();
        System.out.println(h1);        //这里String重写了hashCode方法
    }

}


public class person extends Object/*这里的Object可以省略*/{


}




/*
HashSet存储自定义元素

set集合报错元素唯一：
    存储的元素（String，Integer ，Student ，Person ），必须重写hasCode方法和equals方法


 */

public class person{                                   //必须重写两个方法才能正确识别两个不同的自定义元素
    private Strintg name;
    private int age;

    public boolean equals(Object o){                       //重写equals方法
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        person person = (person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    public int hashCode(){                                //重写hashCode方法

        return Object.hash(name, age);
    }
}

public class demo2{

    public static void main(String[] args) {
        HashSet<person> set = new HashSet<>();
        person p1 = new person("l",12);
        person p2 = new person("s",12);
        person p3 = new person("l",12);
        set.add(p1);
        set.add(p2);
        set.add(p3);   //只添加p1与p3
    }

}



/*
java.util.LinkedHashSet  集合  extends HashSet集合
底层就是一个哈希表加上链表，保证元素有序
 */


public class demo3{

    public static void main(String[] args) {
        LinkedHashSet<String> set = new LinkedHashSet<>();
        set.add("www");
        set.add("sss");
        set.add("wew");
        set.add("wew");
        //在列表中三个元素按输入顺序排列，但是重复的没有
    }

}







